#include"../logs/maglog.h"
#include <fstream>
#include <thread>
#include <vector>
#include <mutex>
#include <chrono>
#include <string>
void writeLogs(int numMessages, int threadId) {
    for (int i = 0; i < numMessages; ++i) {
        LOGI("线程 %d 写入的日志消息 %d 时间戳: %ld", threadId, i, std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()));
    }
}

void readLogs(const std::string &logFile, int numReads){
    for (int i = 0; i < numReads; ++i) {
        std::ifstream ifs(logFile);
        if (!ifs.is_open()) {
            LOGE("无法打开日志文件进行读取: %s", logFile.c_str());
            return;
        }

        std::string line;
        while (std::getline(ifs, line)) {
            // 模拟读取操作，可以在实际使用时处理或输出日志内容// LOGI("读取的日志内容: %s", line.c_str()); // 如果需要打印读取内容，可以启用这行
        }

        std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟读取间隔
    }
}

int main(){
    const std::string logFile = "test_logs.txt";
    const int numMessages = 1000;
    const int numReads = 100;

    // 使用 GlobalLoggerBuilder 初始化日志系统
    bitlog::GlobalLoggerBuilder::ptr lbp(new bitlog::GlobalLoggerBuilder);
    lbp->buildLoggerName("test_logger");
    lbp->buildLoggerLevel(bitlog::LogLevel::value::INFO); // 确保设置正确的日志级别
    lbp->buildFormatter("%m");
    lbp->buildSink<bitlog::FileSink>(logFile); // 设置日志输出文件为 test_logs.txt
    lbp->buildLoggerType(bitlog::Logger::Type::LOGGER_SYNC); // 使用同步日志器
    lbp->build();

    // 创建写入和读取线程
    std::thread writer1(writeLogs, numMessages, 1);
    std::thread writer2(writeLogs, numMessages, 2);
    std::thread reader(readLogs, logFile, numReads);

    // 等待所有线程完成
    writer1.join();
    writer2.join();
    reader.join();

    LOGI("日志写入与读取测试完成。");

    return 0;
}




// #include"../logs/maglog.h"
// #include <fstream>
// #include <thread>
// #include <vector>
// #include <mutex>
// #include <chrono>
// #include <string>
// void writeLogs(int numMessages, int threadId) {
//     for (int i = 0; i < numMessages; ++i) {
//         LOGI("线程 %d 写入的日志消息 %d 时间戳: %ld", threadId, i, std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()));
//     }
// }

// void readLogs(const std::string &logFile, int numReads){
//     for (int i = 0; i < numReads; ++i) {
//         std::ifstream ifs(logFile);
//         if (!ifs.is_open()) {
//             LOGE("无法打开日志文件进行读取: %s", logFile.c_str());
//             return;
//         }

//         std::string line;
//         while (std::getline(ifs, line)) {
//             // 模拟读取操作，可以在实际使用时处理或输出日志内容// LOGI("读取的日志内容: %s", line.c_str()); // 如果需要打印读取内容，可以启用这行
//         }

//         std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟读取间隔
//     }
// }

// int main(){
//     const std::string logFile = "test_logs.txt";
//     const int numMessages = 1000;
//     const int numReads = 100;

//     // 使用 GlobalLoggerBuilder 初始化日志系统
//     bitlog::GlobalLoggerBuilder::ptr lbp(new bitlog::GlobalLoggerBuilder);
//     lbp->buildLoggerName("test_logger");
//     lbp->buildFormatter("%m");
//     lbp->buildSink<bitlog::FileSink>(logFile); // 设置日志输出文件为 test_logs.txt
//     lbp->buildLoggerType(bitlog::Logger::Type::LOGGER_SYNC);
//     lbp->build();

//     // 创建写入和读取线程
//     std::thread writer1(writeLogs, numMessages, 1);
//     std::thread writer2(writeLogs, numMessages, 2);
//     std::thread reader(readLogs, logFile, numReads);

//     // 等待所有线程完成
//     writer1.join();
//     writer2.join();
//     reader.join();

//     LOGI("日志写入与读取测试完成。");

//     return 0;
// }


// #include"../logs/maglog.h"
// #include <fstream>
// #include <thread>
// #include <vector>
// #include <mutex>
// #include <chrono>
// #include <string>
// // 写入日志函数
// void writeLogs(int numMessages, int threadId) {
//     for (int i = 0; i < numMessages; ++i) {
//         LOGI("线程 %d 写入的日志消息 %d 时间戳: %ld", threadId, i, std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()));
//     }
// }

// // 读取日志函数
// void readLogs(const std::string &logFile, int numReads) {
//     for (int i = 0; i < numReads; ++i) {
//         std::ifstream ifs(logFile);
//         if (!ifs.is_open()) {
//             LOGE("无法打开日志文件进行读取: %s", logFile.c_str());
//             return;
//         }

//         std::string line;
//         while (std::getline(ifs, line)) {
//             // 模拟读取操作，可以在实际使用时处理或输出日志内容
//             LOGI("读取的日志内容: %s", line.c_str()); 
//             // 如果需要打印读取内容，可以启用这行
//         }

//         std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟读取间隔
//     }
// }

// int main(){
//     const std::string logFile = "test_logs.txt";
//     const int numMessages = 1000;
//     const int numReads = 100;

// // 初始化日志系统
//     bitlog::GlobalLoggerBuilder::ptr lbp(new bitlog::GlobalLoggerBuilder);
//     lbp->buildLoggerName("root");
//     lbp->buildFormatter("%m");
//     lbp->buildSink<bitlog::FileSink>(logFile); // 设置日志输出文件为 test_logs.txt
//     lbp->buildLoggerType(bitlog::Logger::Type::LOGGER_SYNC);
//     lbp->build();

//     // 创建写入和读取线程std::thread writer1(writeLogs, numMessages, 1);
//     std::thread writer2(writeLogs, numMessages, 2);
//     std::thread reader(readLogs, logFile, numReads);

//     // 等待所有线程完成
//     writer1.join();
//     writer2.join();
//     reader.join();

//     LOGI("日志写入与读取测试完成。");

//     return 0;
// }






// #include<iostream>
// #include <fstream>
// #include <thread>
// #include <vector>
// #include <mutex>
// #include <chrono>
// #include <string>// 互斥锁，保护文件访问
// std::mutex logMutex;

// // 写入日志函数
// void writeLogs(const std::string &logFile, int numMessages, int threadId) {
//     std::ofstream ofs(logFile, std::ios::app);
//     if (!ofs.is_open()) {
//         std::cerr << "无法打开日志文件进行写入: " << logFile << std::endl;
//         return;
//     }

//     for (int i = 0; i < numMessages; ++i) {
//         std::lock_guard<std::mutex> guard(logMutex);
//         ofs << "线程 " << threadId << " 写入的日志消息 " << i 
//             << " 时间戳: " << std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()) 
//             << std::endl;
//     }
// }

// // 读取日志函数
// void readLogs(const std::string &logFile, int numReads) {
//     for (int i = 0; i < numReads; ++i) {
//         std::lock_guard<std::mutex> guard(logMutex);
//         std::ifstream ifs(logFile);
//         if (!ifs.is_open()) {
//             std::cerr << "无法打开日志文件进行读取: " << logFile << std::endl;
//             return;
//         }

//         std::string line;
//         while (std::getline(ifs, line)) {
//             // 模拟读取操作，实际使用时可以处理或输出日志内容
//             std::cout << line << std::endl; 
//             // 如果需要打印读取内容，可以启用这行
//         }

//         std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟读取间隔
//     }
// }

// int main(){
//     const std::string logFile = "test_logs.txt";
//     const int numMessages = 1000;
//     const int numReads = 100;

//     // 创建写入和读取线程
//     std::thread writer1(writeLogs, logFile, numMessages, 1);
//     std::thread writer2(writeLogs, logFile, numMessages, 2);
//     std::thread reader(readLogs, logFile, numReads);

//     // 等待所有线程完成
//     writer1.join();
//     writer2.join();
//     reader.join();

//     std::cout << "日志写入与读取测试完成。" << std::endl;

//     return 0;
// }


// #include<iostream>
// #include <fstream>
// #include <thread>
// #include <vector>
// #include <mutex>
// #include <chrono>

// std::mutex logMutex;

// void writeLogs(const std::string &logFile, int numMessages, int threadId){
//     std::ofstream ofs(logFile, std::ios::app);
//     if (!ofs.is_open()) {
//         std::cerr << "无法打开日志文件进行写入: " << logFile << std::endl;
//         return;
//     }

//     for (int i = 0; i < numMessages; ++i) {
//         std::lock_guard<std::mutex> guard(logMutex);
//         ofs << "线程 " << threadId << " 写入的日志消息 " << i << " 时间戳: "
//             << std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()) << std::endl;
//     }
// }

// void readLogs(const std::string &logFile, int numReads){
//     for (int i = 0; i < numReads; ++i) {
//         std::lock_guard<std::mutex> guard(logMutex);
//         std::ifstream ifs(logFile);
//         if (!ifs.is_open()) {
//             std::cerr << "无法打开日志文件进行读取: " << logFile << std::endl;
//             return;
//         }
//         std::string line;
//         while (std::getline(ifs, line)) {
//             // 模拟读取操作，实际使用时可以分析或输出日志内容
//         }
//         std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟读取间隔
//     }
// }

// int main(){
//     const std::string logFile = "test_logs.txt";
//     constint numMessages = 1000;
//     constint numReads = 100;

//     // 创建写入和读取线程
//     std::thread writer1(writeLogs, logFile, numMessages, 1);
//     std::thread writer2(writeLogs, logFile, numMessages, 2);
//     std::thread reader(readLogs, logFile, numReads);

//     // 等待所有线程完成
//     writer1.join();
//     writer2.join();
//     reader.join();

//     std::cout << "日志写入与读取测试完成。" << std::endl;

//     return  0;
// }
